// hdu3926
// 题意：给定n(<=10000)个小朋友，小朋友牵小朋友的手，一个小朋友的一只手
//       只能最多牵另一个小朋友的一只手。问，给定两个小朋友相互牵手关系，
//       问是否同构。
//
// 题解：一开始忘了可以形成环，wa了一次。并查集就行。
//
// 统计：46ms, 1wa
//
// run: $exec < input
#include <cstdio>
#include <algorithm>
#include <utility>

int const maxn = 10010;
bool is_circle[maxn];
int parent[maxn];
int rank[maxn];
std::pair<int, bool> q[2][maxn];
int tot[2];

void init(int n)
{
	for (int i = 1; i <= n; i++)
		parent[i] = i, rank[i] = 1, is_circle[i] = false;
}

int get_parent(int u)
{
	return u == parent [u] ? u : (parent[u] = get_parent(parent[u]));
}

void set_union(int u, int v)
{
	int tu = get_parent(u);
	int tv = get_parent(v);
	if (tu != tv) {
		if (rank[tu] < rank[tv]) {
			parent[tu] = tv;
			if (is_circle[tu]) is_circle[tv] = true;
		} else {
			parent[tv] = tu;
			if (is_circle[tv]) is_circle[tu] = true;
			if (rank[tu] == rank[tv]) rank[tu]++;
		}
	}
}

void count(int k, int n)
{
	for (int i = 1; i <= n; i++) parent[i] = get_parent(parent[i]);

	std::sort(parent + 1, parent + n + 1);
	tot[k] = 0;
	parent[++n] = -1; int c = 1;
	for (int i = 2; i <= n; i++, c++) {
		if (parent[i] == parent[i - 1]) continue;
		q[k][++tot[k]].first = c;
		q[k][tot[k]].second = is_circle[parent[i - 1]];
		c = 0;
	}
}

int main()
{
	int T;
	std::scanf("%d", &T);
	for (int ti = 1; ti <= T; ti++) {
		std::printf("Case #%d: ", ti);
		int n1, m1, n2, m2;
		std::scanf("%d %d", &n1, &m1);
		init(n1);
		for (int i = 0, x, y; i < m1; i++) {
			std::scanf("%d %d", &x, &y);
			if (get_parent(x) == get_parent(y)) {
				is_circle[get_parent(x)] = true;
			}
			set_union(x, y);
		}
		count(0, n1);

		std::scanf("%d %d", &n2, &m2);
		init(n2);
		for (int i = 0, x, y; i < m2; i++) {
			std::scanf("%d %d", &x, &y);
			if (get_parent(x) == get_parent(y)) {
				is_circle[get_parent(x)] = true;
			}
			set_union(x, y);
		}

		if (n1 != n2 || m1 != m2) { std::printf("NO\n"); continue; }

		count(1, n2);
		if (tot[0] != tot[1]) { std::printf("NO\n"); continue; }
		std::sort(q[0] + 1, q[0] + tot[0] + 1);
		std::sort(q[1] + 1, q[1] + tot[1] + 1);

		bool isomorphism = true;
		for (int i = 1; i <= tot[0]; i++)
			if (q[0][i] != q[1][i]) { isomorphism = false; break; }
		if (isomorphism) std::printf("YES\n");
		else			 std::printf("NO\n");
	}
}

